Übung 2: B-Rep Topologie
David Straub
Nach dieser Übung können Sie:
import build123d as bd from build123d import GeomType
# Unser Ausgangskörper: Montageplatte mit vier Bohrungen platte = bd.Box(80, 60, 8) for x, y in [(-27, -20), (27, -20), (-27, 20), (27, 20)]: platte = platte - bd.Pos(x, y) * bd.Cylinder(radius=4, height=8) platte
Untersuchen Sie die Topologie der Montageplatte:
show_topology()
Hinweise: .show_topology(), .faces(), .edges(), .vertices(), len()
.show_topology()
.faces()
.edges()
.vertices()
len()
Geben Sie für jede Fläche den Geometrietyp und die Fläche aus. Dasselbe für jede Kante mit Länge.
Hinweise: .geom_type, .area, .length, for f in platte.faces():
.geom_type
.area
.length
for f in platte.faces():
Hinweise: .faces(), .sort_by(Axis.Z), .last, .filter_by(GeomType.CYLINDER), .geom_type, .area
.sort_by(Axis.Z)
.last
.filter_by(GeomType.CYLINDER)
radius=1
Hinweise: .edges(), .filter_by(GeomType.CIRCLE), .filter_by_position(Axis.Z, min, max), bd.fillet(..., radius=...)
.filter_by(GeomType.CIRCLE)
.filter_by_position(Axis.Z, min, max)
bd.fillet(..., radius=...)
Selektieren Sie die kleinste und die größte Fläche der Platte. Geben Sie jeweils Typ und Flächeninhalt aus.
Welche Flächen sind das geometrisch?
Hinweise: .sort_by(SortBy.AREA), .first, .last, .area, .geom_type
.sort_by(SortBy.AREA)
.first
Bauen Sie einen Zylinder (radius=12, height=15) mittig auf der Oberseite der Platte auf.
radius=12
height=15
Frage: Warum bd.Plane(oberseite) statt bd.Plane.XY.offset(8)? Was wäre der Unterschied in einem komplexeren Modell?
bd.Plane(oberseite)
bd.Plane.XY.offset(8)
Hinweise: .faces().sort_by(Axis.Z).last, bd.Plane(face), ebene * zapfen, basis + ...
.faces().sort_by(Axis.Z).last
bd.Plane(face)
ebene * zapfen
basis + ...
radius=2
Hinweise: .edges().filter_by(GeomType.CIRCLE), .sort_by(Axis.Z), .last, List-Slicing [-2:], bd.fillet()
.edges().filter_by(GeomType.CIRCLE)
[-2:]
bd.fillet()
Konstruieren Sie einen Flansch (Ringscheibe mit Bohrungen auf einem Lochkreis):
import math # Ringscheibe: großer Zylinder minus kleiner Zylinder flansch = bd.Cylinder(radius=40, height=12) - bd.Cylinder(radius=18, height=12) # Lochkreis: 6 Bohrungen im Abstand von 60° for winkel in range(0, 360, 60): x = 30 * math.cos(math.radians(winkel)) y = 30 * math.sin(math.radians(winkel)) flansch = flansch - bd.Pos(x, y) * bd.Cylinder(radius=4, height=12) flansch
Hinweise: .filter_by(GeomType.CYLINDER), .filter_by(GeomType.CIRCLE), .filter_by_position(Axis.Z, ...), bd.fillet(), bd.chamfer()
.filter_by_position(Axis.Z, ...)
bd.chamfer()
Laden Sie eine STEP-Datei (z.B. aus FreeCAD, GrabCAD oder dem Kursordner):
teil = bd.import_step("mein_teil.step")
Hinweise: .show_topology(), .faces(), .geom_type, collections.Counter, .filter_by(GeomType.CIRCLE), bd.fillet()
collections.Counter